package com.leihao.marketing.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 优惠券实体
 */
@TableName("coupon")
public class Coupon implements Serializable {

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     * 优惠券编号
     */
    @TableId(type = IdType.AUTO)
    private Integer couponId;
    /**
     * 优惠卷类型；0->全场赠券；1->会员赠券；2->购物赠券；3->注册赠券
     */
    private Integer couponType;
    /**
     * 名称
     */
    private String couponName;
    /**
     * 使用平台：0->全部；1->移动；2->PC
     */
    private Integer platform;
    /**
     * 数量
     */
    private Integer couponCount;
    /**
     * 金额
     */
    private BigDecimal couponPrice;
    /**
     * 每人限领张数
     */
    private Integer perLimit;
    /**
     * 使用门槛；0表示无门槛
     */
    private BigDecimal minPoint;
    /**
     * 开始使用时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    /**
     * 结束使用时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
    /**
     * 使用类型：0->全场通用；1->指定分类；2->指定商品
     */
    private Integer useType;
    /**
     * 备注
     */
    private String couponNote;
    /**
     * 发行数量
     */
    private Integer publishCount;
    /**
     * 已使用数量
     */
    private Integer useCount;
    /**
     * 领取数量
     */
    private Integer receiveCount;
    /**
     * 可以领取的日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date enableTime;
    /**
     * 优惠码
     */
    private String couponCode;
    /**
     * 可领取的会员类型：0->无限制 1:黄金会员 2:铂金会员 3:钻石会员
     */
    private Integer memberLevel;

    /**
     * 逻辑删除
     */
    @TableField("is_delete")
    @TableLogic
    private Integer isDelete;
    /**
     * 优惠券状态 0:未过期 1:已过期
     */
    private Integer couponStatus;

    public Integer getCouponStatus() {
        return couponStatus;
    }

    public void setCouponStatus(Integer couponStatus) {
        this.couponStatus = couponStatus;
    }

    public Coupon(Integer couponId, Integer couponType, String couponName, Integer platform, Integer couponCount, BigDecimal couponPrice, Integer perLimit, BigDecimal minPoint, Date startTime, Date endTime, Integer useType, String couponNote, Integer publishCount, Integer useCount, Integer receiveCount, Date enableTime, String couponCode, Integer memberLevel, Integer isDelete, Integer couponStatus) {
        this.couponId = couponId;
        this.couponType = couponType;
        this.couponName = couponName;
        this.platform = platform;
        this.couponCount = couponCount;
        this.couponPrice = couponPrice;
        this.perLimit = perLimit;
        this.minPoint = minPoint;
        this.startTime = startTime;
        this.endTime = endTime;
        this.useType = useType;
        this.couponNote = couponNote;
        this.publishCount = publishCount;
        this.useCount = useCount;
        this.receiveCount = receiveCount;
        this.enableTime = enableTime;
        this.couponCode = couponCode;
        this.memberLevel = memberLevel;
        this.isDelete = isDelete;
        this.couponStatus = couponStatus;
    }

    public Coupon(Integer couponId, Integer couponType, String couponName, Integer platform, Integer couponCount, BigDecimal couponPrice, Integer perLimit, BigDecimal minPoint, Date startTime, Date endTime, Integer useType, String couponNote, Integer publishCount, Integer useCount, Integer receiveCount, Date enableTime, String couponCode, Integer memberLevel, Integer isDelete) {
        this.couponId = couponId;
        this.couponType = couponType;
        this.couponName = couponName;
        this.platform = platform;
        this.couponCount = couponCount;
        this.couponPrice = couponPrice;
        this.perLimit = perLimit;
        this.minPoint = minPoint;
        this.startTime = startTime;
        this.endTime = endTime;
        this.useType = useType;
        this.couponNote = couponNote;
        this.publishCount = publishCount;
        this.useCount = useCount;
        this.receiveCount = receiveCount;
        this.enableTime = enableTime;
        this.couponCode = couponCode;
        this.memberLevel = memberLevel;
        this.isDelete = isDelete;
    }

    public Integer getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }

    public Integer getCouponId() {
        return couponId;
    }

    public void setCouponId(Integer couponId) {
        this.couponId = couponId;
    }

    public Integer getCouponType() {
        return couponType;
    }

    public void setCouponType(Integer couponType) {
        this.couponType = couponType;
    }

    public String getCouponName() {
        return couponName;
    }

    public void setCouponName(String couponName) {
        this.couponName = couponName;
    }

    public Integer getPlatform() {
        return platform;
    }

    public void setPlatform(Integer platform) {
        this.platform = platform;
    }

    public Integer getCouponCount() {
        return couponCount;
    }

    public void setCouponCount(Integer couponCount) {
        this.couponCount = couponCount;
    }

    public BigDecimal getCouponPrice() {
        return couponPrice;
    }

    public void setCouponPrice(BigDecimal couponPrice) {
        this.couponPrice = couponPrice;
    }

    public Integer getPerLimit() {
        return perLimit;
    }

    public void setPerLimit(Integer perLimit) {
        this.perLimit = perLimit;
    }

    public BigDecimal getMinPoint() {
        return minPoint;
    }

    public void setMinPoint(BigDecimal minPoint) {
        this.minPoint = minPoint;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public Integer getUseType() {
        return useType;
    }

    public void setUseType(Integer useType) {
        this.useType = useType;
    }

    public String getCouponNote() {
        return couponNote;
    }

    public void setCouponNote(String couponNote) {
        this.couponNote = couponNote;
    }

    public Integer getPublishCount() {
        return publishCount;
    }

    public void setPublishCount(Integer publishCount) {
        this.publishCount = publishCount;
    }

    public Integer getUseCount() {
        return useCount;
    }

    public void setUseCount(Integer useCount) {
        this.useCount = useCount;
    }

    public Integer getReceiveCount() {
        return receiveCount;
    }

    public void setReceiveCount(Integer receiveCount) {
        this.receiveCount = receiveCount;
    }

    public Date getEnableTime() {
        return enableTime;
    }

    public void setEnableTime(Date enableTime) {
        this.enableTime = enableTime;
    }

    public String getCouponCode() {
        return couponCode;
    }

    public void setCouponCode(String couponCode) {
        this.couponCode = couponCode;
    }

    public Integer getMemberLevel() {
        return memberLevel;
    }

    public void setMemberLevel(Integer memberLevel) {
        this.memberLevel = memberLevel;
    }

    public Coupon() {
    }

    public Coupon(Integer couponId, Integer couponType, String couponName, Integer platform, Integer couponCount, BigDecimal couponPrice, Integer perLimit, BigDecimal minPoint, Date startTime, Date endTime, Integer useType, String couponNote, Integer publishCount, Integer useCount, Integer receiveCount, Date enableTime, String couponCode, Integer memberLevel) {
        this.couponId = couponId;
        this.couponType = couponType;
        this.couponName = couponName;
        this.platform = platform;
        this.couponCount = couponCount;
        this.couponPrice = couponPrice;
        this.perLimit = perLimit;
        this.minPoint = minPoint;
        this.startTime = startTime;
        this.endTime = endTime;
        this.useType = useType;
        this.couponNote = couponNote;
        this.publishCount = publishCount;
        this.useCount = useCount;
        this.receiveCount = receiveCount;
        this.enableTime = enableTime;
        this.couponCode = couponCode;
        this.memberLevel = memberLevel;
    }
}
